package com.java.Collection.List.ArrayList.source_analyze;

import com.java.Collection.List.ArrayList.source_analyze.source_code.ArrayList;

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // 默认初始化容量为0
        ArrayList arrayList1 = new ArrayList();
        System.out.println(arrayList1.capacity()); // 0
        
        // 原容量为0时无法存下新添加的元素，则扩容为10后存
        arrayList1.add(1);
        System.out.println(arrayList1.capacity()); // 10
        
        // 原容量能存下新添加的元素，则无需扩容直接存
        arrayList1.add(2);
        System.out.println(arrayList1.capacity()); // 10
        
        // 改变判断条件查看不同结果
        if (false) {
            // 原容量无法存下新添加的元素但根据(原容量*1.5)求得的扩容容量能存下新添加的元素，则扩容为(原容量*1.5)后存
            arrayList1.addAll(Arrays.asList(3, 4, 5, 6, 7, 8, 9, 10, 11));
            System.out.println(arrayList1.capacity()); // 15
        } else {
            // 原容量无法存下新添加的元素且根据(原容量*1.5)求得的扩容容量也无法存下新添加的元素，则扩容为加上新增加元素后的实际容量存
            arrayList1.addAll(Arrays.asList(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16));
            System.out.println(arrayList1.capacity()); // 16
        }
        
        // 构造函数指定容量时则为指定容量
        ArrayList arrayList2 = new ArrayList(2);
        System.out.println(arrayList2.capacity()); // 2
        arrayList2.addAll(Arrays.asList(1, 2, 3));
        System.out.println(arrayList2.capacity()); // 3
        
        // 构造函数指定集合时则为集合长度
        ArrayList arrayList3 = new ArrayList(Arrays.asList(1, 2, 3, 4));
        System.out.println(arrayList3.capacity()); // 4
        arrayList3.addAll(Arrays.asList(5, 6));
        System.out.println(arrayList3.capacity()); // 6
    }
}
